﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using TOAcademias;
namespace DAOAcademias
{

    /*************************************
    Autor: Brian Pari
    Fecha de Creación: 06/02/2011
    Descripción de la Funcionalidad: Clase que contiene metodos que serviran para dar
    soporte a los registros de la entidad Horario.
    **************************************/

    public class DOHorario
    {
        DBModuloAcademiasDataContext dbml;

        public DOHorario()
        {
            dbml = new DBModuloAcademiasDataContext();
        }

        public List<TOHorario> obtenerHorariosxInf(string codInfraestructura)
        {

            List<TOHorario> listaHorarios = new List<TOHorario>();



            var horarios = (from hor in dbml.HORARIOs
                            where hor.COD_INFRAESTRUCTURA==codInfraestructura
                           select hor
                             ) ;

            foreach (var horario in horarios) {

                TOHorario toHorario = new TOHorario();
                toHorario.Cod_horario = horario.COD_HORARIO;
                toHorario.Cod_infraestructura = horario.COD_INFRAESTRUCTURA;
                toHorario.Cod_seccion = horario.COD_SECCION;
                toHorario.Hora = horario.HORA.Value;
                toHorario.Dia = horario.DIA.Value;

                listaHorarios.Add(toHorario);
            
            }
            
            return listaHorarios;
        }


        public List<TOHorario> obtenerHorariosxSec(string codSeccion)
        {

            List<TOHorario> listaHorarios = new List<TOHorario>();


            var horarios = (from hor in dbml.HORARIOs
                            where hor.COD_SECCION == codSeccion
                            select hor
                             );

            foreach (var horario in horarios)
            {

                TOHorario toHorario = new TOHorario();
                toHorario.Cod_horario = horario.COD_HORARIO;
                toHorario.Cod_infraestructura = horario.COD_INFRAESTRUCTURA;
                toHorario.Cod_seccion = horario.COD_SECCION;
                toHorario.Hora = horario.HORA.Value;
                toHorario.Dia = horario.DIA.Value;

                listaHorarios.Add(toHorario);

            }

            return listaHorarios;
        }

        public List<TOHorario> obtenerHorariosxInstructor(string codInstructor)
        {

            List<TOHorario> listaHorarios = new List<TOHorario>();


            var horarios = (from hor in dbml.HORARIOs
                            join sec in dbml.SECCIONs
                            on hor.COD_SECCION equals sec.COD_SECCION
                            where sec.COD_INSTRUCTOR == codInstructor
                            select hor
                             );

            foreach (var horario in horarios)
            {

                TOHorario toHorario = new TOHorario();
                toHorario.Cod_horario = horario.COD_HORARIO;
                toHorario.Cod_infraestructura = horario.COD_INFRAESTRUCTURA;
                toHorario.Cod_seccion = horario.COD_SECCION;
                toHorario.Hora = horario.HORA.Value;
                toHorario.Dia = horario.DIA.Value;

                listaHorarios.Add(toHorario);

            }

            return listaHorarios;
        }

        public List<TOHorario> obtenerHorariosxSocio(string codSocio)
        {

            List<TOHorario> listaHorarios = new List<TOHorario>();


            var horarios = (from hor in dbml.HORARIOs
                            join matsec in dbml.MATRICULA_SECCIONs
                            on hor.COD_SECCION equals matsec.COD_SECCION
                            join mat in dbml.MATRICULAs
                            on matsec.COD_MATRICULA equals mat.COD_MATRICULA
                            where mat.COD_SOCIO == codSocio
                            select hor
                             );

            foreach (var horario in horarios)
            {

                TOHorario toHorario = new TOHorario();
                toHorario.Cod_horario = horario.COD_HORARIO;
                toHorario.Cod_infraestructura = horario.COD_INFRAESTRUCTURA;
                toHorario.Cod_seccion = horario.COD_SECCION;
                toHorario.Hora = horario.HORA.Value;
                toHorario.Dia = horario.DIA.Value;

                listaHorarios.Add(toHorario);

            }

            return listaHorarios;
        }

        public List<TOHorario> obtenerHorarios()
        {

            List<TOHorario> listaHorarios = new List<TOHorario>();



            var horarios = (from hor in dbml.HORARIOs
                            select hor
                             );

            foreach (var horario in horarios)
            {

                TOHorario toHorario = new TOHorario();
                toHorario.Cod_horario = horario.COD_HORARIO;
                toHorario.Cod_infraestructura = horario.COD_INFRAESTRUCTURA;
                toHorario.Cod_seccion = horario.COD_SECCION;
                toHorario.Hora = horario.HORA.Value;
                toHorario.Dia = horario.DIA.Value;

                listaHorarios.Add(toHorario);

            }

            return listaHorarios;
        }

        public void insertarHorario(TOHorario toHorario)
        {
            List<TOHorario> listaHorarios = obtenerHorarios();

            int intAux = 0;
            int intTemp = 0;
            foreach (TOHorario horario in listaHorarios)
            {

                intTemp = Convert.ToInt32(horario.Cod_horario.Substring(2));
                if (intTemp > intAux)
                {

                    intAux = intTemp;
                }


            }
            intAux = intAux + 1;

            string strCodigo = "" + intAux;

            strCodigo = "HO000".Substring(0, 5 - strCodigo.Length) + intAux;



            HORARIO hor = new HORARIO();
            hor.COD_HORARIO = strCodigo;
            hor.COD_INFRAESTRUCTURA = toHorario.Cod_infraestructura;
            hor.COD_SECCION = toHorario.Cod_seccion;
            hor.DIA = toHorario.Dia;
            hor.HORA = toHorario.Hora;
            hor.ESTADO = toHorario.Estado;
            hor.HOR_INICIO = DateTime.Now;
            hor.HOR_FIN = DateTime.Now;

            dbml.HORARIOs.InsertOnSubmit(hor);
            dbml.SubmitChanges();


        }

        public void eliminarHorario(TOHorario toHorario)
        {
            var horarios = (from hor in dbml.HORARIOs
                            where hor.HORA == toHorario.Hora &&
                                hor.DIA==toHorario.Dia &&
                                hor.COD_SECCION == toHorario.Cod_seccion &&
                                hor.COD_INFRAESTRUCTURA == toHorario.Cod_infraestructura
                            select hor);

            foreach(var horario in horarios){
            dbml.HORARIOs.DeleteOnSubmit(horario);
            }
            

            dbml.SubmitChanges();

        }
    }
}
